\documentclass[12pt, a4paper]{article}
\usepackage{geometry}
\geometry{
	a4paper,
	left=12.7 mm,
	right=12.7 mm,
	top=12.7 mm,
	bottom=12.7 mm,
}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{physics}
\graphicspath{ {./} }
\usepackage{ctex}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, decorations.pathreplacing, 3d}

\newcommand{\bvec}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\matrx}[1]
{
	\ensuremath
	{
		\left (
		\begin{matrix}
			#1
		\end{matrix}
		\right)
	}
}
\newcommand{\formula}[1]{\text{式} \ref{#1} }

\begin{document}
	\section{逆波兰表达式}
	\footnote{本笔记使用AI辅助}
	逆波兰表达式是一种后置运算符的表达式。
	例如，算式$1+(2+3)*4$的逆波兰表达式应该是$123+4*+$。
	这看起来有点像乱码，但其实逆波兰表达式的基本计算规则非常简单：
	\begin{itemize}
		\item 假设有一个足够长的纸带，初始为空（长度为0）
		\item 从逆波兰表达式中读取一个符号
		\begin{itemize}
			\item 若其为数字，则往纸带末尾写入这个数字（长度+1）
			\item 若其为一元运算符（如$\sin, \sqrt{}$等），则对纸带末尾的数字运用这一运算符（长度不变）；
			\item 若其为二元运算符（如$+,-,\times,/$等），则对纸带倒数第二和倒数第一（末尾）的数字运用这一运算符，
			并将结果放入纸带倒数第二的位置，随后删去纸带倒数第一的数（长度-1，此时原先倒数第二的数变成倒数第一） 
		\end{itemize}
		\item 从逆波兰表达式中读取下一个符号，并重复这一过程，直到处理完逆波兰表达式中的所有符号。
		此时纸带长度应该为1（只有一个数），并且这个数就是逆波兰表达式的结果。
	\end{itemize}
	这么说有点太抽象了，以$1+(2+3)*4$为例子，他的逆波兰表达式应该是$123+4*+$，
	运算过程如下
	\begin{itemize}
		\item 读取1，纸带中放入1
		$$1$$
		\item 读取2，纸带中放入2
		$$1~2$$
		\item 读取3，纸带中放入3
		$$1~2~3$$
		\item 读取+，这是一个二元运算符，因此求和纸带倒一(3)和倒二位(2)的数，并将结果（5）放入倒二，删去倒一：
		$$1~5$$
		\item 读取4，纸带中放入4
		$$1~5~4$$
		\item 读取*，这是一个二元运算符，按规则计算
		$$1~20$$
		\item 读取+，这是一个二元运算符，按规则计算
		$$21$$
		\item 我们处理完了逆波兰表达式中的所有符号。
		现在纸带中只有一个数$21$，这便是该逆波兰表达式的运算结果，和直觉一致。
	\end{itemize}
	可见，逆波兰表达式虽然人类读写起来很反直觉，但却非常符合计算机的“直觉”：
	规则简单明了、严格从左向右、运算符没有先后顺序、仅需要一个相当简单的数据结构等。
	
	
	
\end{document}